#ifndef WIFIMONITOR_H
#define WIFIMONITOR_H

#include <QDeclarativeItem>
#include <QTimer>
#include <QPainter>
#include <QPen>
#include <QFont>
#include <QColor>
#include <QPainter>
#include <QPixmap>

#include "qnmsettings.h"
#include "wifidata.h"
#include "wifiitemmodel.h"
#include "wifilistmodel.h"

class WiFiListData : public QObject
{
    Q_OBJECT

    QObject *parent;

    /* список wifi данных */
    WiFiListModel *listModel;
public:
    explicit WiFiListData( QObject *parent, QNMSettings * qset);
    Q_INVOKABLE void initListWiFiData();
};


class WiFiMonitor : public QDeclarativeItem
{
    Q_OBJECT

    Q_PROPERTY( int height READ getHeight WRITE setHeight NOTIFY changeHeight )
    Q_PROPERTY( int width READ getWidth WRITE setWidth NOTIFY changeWidth )

    Q_PROPERTY( bool isWork READ getStatusTimer WRITE setStatusTimer NOTIFY changeStatusMonitor )

    Q_PROPERTY( bool isUpdate READ getStatusUpdate NOTIFY updateStatusChange )

    QString iface;

    QNMSettings *qset_here;
    WiFiData *wifiData;

    /* основной таймер опроса */
    QTimer timer;
    int timeout;

    /* размеры графика в ландшафтном режиме */
    int LX_l, LY_l;
    /* размеры графика в портретном режиме */
    int LX_p, LY_p;

    int shiftX, shiftY;
    int lenghtX, lenghtY;

    /* длина графика по Y */
    int Ly;
    /* длина графика по X */
    int Lx;

    /* ширина линии графика */
    int pxLenGraph;

    /* кисть и шрифт системы координат */
    QPen penSC;

    /* кисть и шрифт сетки */
    QPen penGrid;
    QFont fontGrid;

    /* список с WiFi данными */
    QList< Map > listWiFiData;

    QList<int> listShiftWiFiChannel;
    int bandWiFiChannel;
    float widthMHz;

    //QList<QColor> listColorGraph;
    QColor *clr00_10;
    QColor *clr10_20;
    QColor *clr20_30;
    QColor *clr30_40;
    QColor *clr40_50;
    QColor *clr50_60;
    QColor *clr60_70;
    QColor *clr70_80;
    QColor *clr80_90;
    QColor *clr90_99;
    QColor *colorLevel( const float quality ) const;

    void drawSystemCoord( QPainter* paint );
    void drawGrid( QPainter* paint );
    void drawWiFiSpectrum( QPainter* paint );

    bool isUpdateRunning;
    bool flDataExists;

public:
    explicit WiFiMonitor(QDeclarativeItem *parent = 0);
    ~WiFiMonitor();
    virtual void paint(QPainter *paint, const QStyleOptionGraphicsItem *options, QWidget *widget);

    inline int getHeight( ) { return lenghtY; }
    inline void setHeight( const int h ) { lenghtY = h; }

    inline int getWidth( ) { return lenghtX; }
    inline void setWidth( const int w ) { lenghtX = w; }

    inline bool getStatusTimer( ) { return timer.isActive(); }
    inline void setStatusTimer( bool s ) { if(s) { timer.stop(); } else { timer.start(); } }

    inline bool getStatusUpdate() { return isUpdateRunning; }

    static QList< Map >* __listWiFiData;
    
signals:
    void changeHeight();
    void changeWidth();
    void changeStatusMonitor();
    void changeValueParam();
    void changeSettings();
    void updateStatusChange();
    void updateListWiFiData();
    
public slots:
    Q_INVOKABLE void timerStart();
    Q_INVOKABLE void timerStop();
    Q_INVOKABLE void initSettings();
    Q_INVOKABLE void updateWiFiData();

private slots:
    void getWiFiData( bool );
    void getWiFiError();
    
};

#endif // WIFIMONITOR_H
